import router from './router'
import store from './store'
import { getToken, getPermission } from '@/utils/auth' // 获取本地存储的token和动态路由数据
import getPageTitle from '@/utils/get-page-title'// 获取页面的title
import { Message } from 'element-ui'
import childrenRouter from '@/utils/childrenRouter'


const whiteList = ['/login', '/404'] // 不需要重定向白名单：登录和404页面不需要重定向
//to要跳转的路径
// from 从哪里来的
// next()放行
router.beforeEach(async (to, from, next) => {
  // 设置页面title标题
  document.title = getPageTitle(to.meta.title)

  const hasToken = getToken()

  // 判断用户是否已经登录
  if (hasToken) {
    if (to.path === '/login') {
      // 如果已登录，则重定向到/页面
      next({ path: '/' })
    } else {
      // 有添加动态路由的数据并且已经拿到接口返回的路由数据   这里是在router.js中自定义的
      if (router.options.isAddDynamicMenuRoutes) { // 这里可以根据路由的长度去判断数据
        next() // 放行
      } else {
        // 没有动态添加路由的数据 则重新获取
        try {
          // 获取本地存储的路由信息（后台返回的）
          const Permission = getPermission()

          if (Permission.length < 1) { return Promise.reject('菜单数据加载异常') }
          // ajax获取动态接口数据
          const accessRoutes = await store.dispatch('permission/generateRoutes', Permission)
          // 拿到的数据

          // accessRoutes[0].children[2].children[5].component = 'http://jx.qida999.com/DriverCommon/driver/dr_pmoney_Day_pno_Rpt.html?ver=1702373289999'

          // console.log(accessRoutes[0].children[2].children[5].component);

          // 注意!!!!：404页面必须手动写在最后
          accessRoutes.unshift({ path: '*', redirect: '/404', hidden: true })

          // 添加动态路由 
          router.addRoutes(accessRoutes)

          // 将状态修改为true动态添加路由 页面刷新不重新获取路由
          router.options.isAddDynamicMenuRoutes = true
          
          next({ ...to, replace: true })
        } catch (error) {
          console.log('动态路由发生错误', error)

          // 路由数据发生异常 移除Token等数据并重定向到login页面
          await store.dispatch('user/resetToken')

          Message.error(error || '菜单数据发生错误 请联系管理员')

          next(`/login?redirect=${to.path}`)
        }
      }

      // 解决点击nav 二三级路由无法重定向的问题
      /* if (to.path == '/adminSystem/main') {
        next({ path: '/adminSystem/main/accountInfo' })
      } */
      /* const result = childrenRouter(to.path)
      if (result) next({ path: result }) */


    }
  } else {
    // 不需要重定向白名单
    if (whiteList.indexOf(to.path) !== -1) {
      next()
    } else {
      next(`/login?redirect=${to.path}`)
    }
  }
})

// 全局后置守卫 路由跳转之后
router.afterEach(() => {
  // finish progress bar
})
